import * as actionTypes from '../action-types';
const actionCreators = {
    add(){
        return {type:actionTypes.ADD};
    },
    minus(){
        return {type:actionTypes.MINUS}
    },
    thunkAdd(){
        //这是我们的actionCreator,是用来创建action的
        //它的返回值我们会传递给 store.dispatch
        return function (dispatch){
            setTimeout(()=>{
                //1秒后才真正派发加1的action
                dispatch({type:actionTypes.ADD});
            },1000)
        }
    },
    promiseAdd(){
        //返回一个Promise实例
        //那就意味着我们把此Promise实例传递给了store.dispatch(promise)
        //当我们添加了redux-promise中间件之后，当我们store.dispatch(promise)
        //promise中间件会拦截这个action，等待promise完成，等promise完成之后
        //获取成功的值，也就是resolve方法的参数，再次进行派发这个值
        return new Promise((resolve)=>{
            setTimeout(()=>{
             resolve({type:actionTypes.ADD});
             // dispatch({type:actionTypes.ADD});
            },1000)
        });
    },
    promiseAdd2(){
        return {
            type:actionTypes.ADD,//是一个普通的字符串
            //返回一个普通对象作为action，但是它的payload 属性是一个Promise
            payload:new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    const amount = Math.random();
                    if(amount>.5){
                        resolve(amount);
                    }else{
                        reject(amount)
                    }
                },1000)
            }).then((amount)=>{
                return {amount};
            },(amount)=>{
                return {amount,error:true};
            })
        }
        //redux-promise也可以处理这种情况
        //判断如果动作的payload属性是一个promise的话，也会等待promise成功或者失败
        //不管是成功还是失败，一旦有了结果 会再次派发动作{type:ADD,payload:0.6}
    }
}
export default actionCreators;